/*
 *  NFCSigning - Open source library for signing/validation of NDEF messages
 *  Copyright (C) 2009-2010 The NFCSigning Team
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License as published by the Free Software Foundation; either
 *  version 2.1 of the License, or (at your option) any later version.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 *
 */
package org.nfcsigning.algorithm;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Hashtable;

/**
 *
 * @author emarkki
 */
public class TestData {
    
    /** 
     * SmartPoster containing URL and Sig using ECDSA.
     * Created using SampleAppAMidlet 0.2-alpha
     * 
     *  URI: http://www.ericsson.com
     *  Certificate: Mora-Nisse (3) (ECDSA)
     *  Certificate chain present: Yes
     *  Signature algorithm: ECDSA
     *  Signature present: Yes
     * 
     * 1883 bytes 
     *
     */
    public static final String msgSpUrlMoraNisseChainSigECDSA = "files/msgSpUrlMoraNisseChainSigECDSA.dat";
    
    /** 
     * SmartPoster containing URL and Sig using DSA.
     * Created using SampleAppAMidlet 0.3-alpha
     * 
     *  URI: http://www.dsa.se
     *  Certificate: Lars-Nils (4) (DSA)
     *  Certificate chain present: Yes
     *  Signature algorithm: DSA
     *  Signature present: Yes
     * 
     * 3073 bytes 
     */
    public static final String msgSpUrlLarsNilsChainSigDSA = "files/msgSpUrlLarsNilsChainSigDSA.dat";
    
    
    
    private Hashtable data = new Hashtable();
    
    byte[] getBytes(String dataFile) {
        
        byte[] bytes = (byte[])data.get(dataFile);
        
        if(bytes == null) {
            bytes = readBinaryFile(dataFile);
            data.put(dataFile, bytes);
        }
        
        return bytes;
    }
    
    private byte[] readBinaryFile(String fileName) {
        try {

            
            InputStream in = getClass().getResourceAsStream(fileName);
            
            if(in == null) {
                throw new RuntimeException("No such file: " + fileName); // Note: Do not obfuscate this class!
            }
            
            ByteArrayOutputStream out = new ByteArrayOutputStream(1024);

            byte[] buffer = new byte[512];

            int ch;
            while ((ch = in.read(buffer)) > 0) {
                out.write(buffer, 0, ch);
            }
            in.close();

            return out.toByteArray();
        } catch (IOException ex) {
            ex.printStackTrace();
            throw new RuntimeException("IOException: " + ex.getMessage());
        }
    }
    
    
    
    /**
     *  <code>
     *   byte[] coveredBytes = "MESSAGE TO SIGN".getBytes();
     *   PrivateKey privKey = new PrivateKey(getClass().getResourceAsStream("files/markus1-priv.der"));
     *
     *   byte[] signature = NDEFSignatureValidator.signUsingRSASSAPSS(coveredBytes, privKey);
     * 
     *   Utils.dumpAsJavaByteArray(signature);
     *  </code>
     * 64 bytes 
     */
    public static final byte[] pssSignedMsg1 = { 
        (byte) 49, 
        (byte) 38,         (byte) 184,         (byte) 47,         (byte) 34, 
        (byte) 146,         (byte) 158,         (byte) 73,         (byte) 189, 
        (byte) 214,         (byte) 77,         (byte) 188,         (byte) 21, 
        (byte) 89,         (byte) 133,         (byte) 16,         (byte) 155, 
        (byte) 106,         (byte) 8,         (byte) 233,         (byte) 90, 
        (byte) 106,         (byte) 93,         (byte) 246,         (byte) 185, 
        (byte) 243,         (byte) 134,         (byte) 220,         (byte) 235, 
        (byte) 225,         (byte) 238,         (byte) 119,         (byte) 243, 
        (byte) 146,         (byte) 212,         (byte) 131,         (byte) 87, 
        (byte) 231,         (byte) 130,         (byte) 103,         (byte) 137, 
        (byte) 220,         (byte) 137,         (byte) 225,         (byte) 80, 
        (byte) 90,         (byte) 48,         (byte) 156,         (byte) 92, 
        (byte) 48,         (byte) 119,         (byte) 61,         (byte) 157, 
        (byte) 45,         (byte) 32,         (byte) 107,         (byte) 203, 
        (byte) 95,         (byte) 198,         (byte) 14,         (byte) 196, 
        (byte) 22,         (byte) 214,         (byte) 21, 
    };

    /** 
     * <code>
     *   byte[] coveredBytes = "Message...".getBytes();
     *   PrivateKey privKey = new PrivateKey(getClass().getResourceAsStream("files/KalleKarlsson-priv.der"));
     *
     *   byte[] signature = NDEFSignatureValidator.signUsingRSASSAPSS(coveredBytes, privKey);
     * 
     *   Utils.dumpAsJavaByteArray(signature);
     *  </code>
     * 
     * 128 bytes 
     */
    public static final byte[] pssSignedMsg2 = { 
        (byte) 144, 
        (byte) 158,         (byte) 69,         (byte) 217,         (byte) 42, 
        (byte) 62,         (byte) 24,         (byte) 105,         (byte) 243, 
        (byte) 22,         (byte) 181,         (byte) 15,         (byte) 4, 
        (byte) 71,         (byte) 98,         (byte) 23,         (byte) 69, 
        (byte) 192,         (byte) 149,         (byte) 17,         (byte) 157, 
        (byte) 131,         (byte) 210,         (byte) 124,         (byte) 28, 
        (byte) 154,         (byte) 63,         (byte) 147,         (byte) 56, 
        (byte) 115,         (byte) 135,         (byte) 215,         (byte) 220, 
        (byte) 211,         (byte) 5,         (byte) 158,         (byte) 54, 
        (byte) 103,         (byte) 229,         (byte) 57,         (byte) 109, 
        (byte) 144,         (byte) 143,         (byte) 97,         (byte) 249, 
        (byte) 45,         (byte) 15,         (byte) 243,         (byte) 88, 
        (byte) 249,         (byte) 160,         (byte) 67,         (byte) 189, 
        (byte) 60,         (byte) 212,         (byte) 0,         (byte) 254, 
        (byte) 84,         (byte) 234,         (byte) 241,         (byte) 148, 
        (byte) 98,         (byte) 63,         (byte) 61,         (byte) 84, 
        (byte) 39,         (byte) 134,         (byte) 106,         (byte) 175, 
        (byte) 224,         (byte) 173,         (byte) 248,         (byte) 114, 
        (byte) 124,         (byte) 157,         (byte) 27,         (byte) 183, 
        (byte) 125,         (byte) 56,         (byte) 99,         (byte) 72, 
        (byte) 124,         (byte) 10,         (byte) 173,         (byte) 197, 
        (byte) 133,         (byte) 255,         (byte) 74,         (byte) 18, 
        (byte) 190,         (byte) 2,         (byte) 223,         (byte) 54, 
        (byte) 47,         (byte) 21,         (byte) 110,         (byte) 45, 
        (byte) 42,         (byte) 95,         (byte) 226,         (byte) 59, 
        (byte) 73,         (byte) 255,         (byte) 99,         (byte) 31, 
        (byte) 113,         (byte) 48,         (byte) 100,         (byte) 142, 
        (byte) 81,         (byte) 15,         (byte) 96,         (byte) 18, 
        (byte) 241,         (byte) 75,         (byte) 52,         (byte) 80, 
        (byte) 49,         (byte) 96,         (byte) 193,         (byte) 189, 
        (byte) 73,         (byte) 173,         (byte) 87,         (byte) 177, 
        (byte) 187,         (byte) 18,         (byte) 33, 
    };

    /**
     * SmartPoster containing URL and bad Sig.
     * Created using com.ericsson.nfc.signingprototypelibrary1 code
     */
    public static final byte[] msgSpUrlSig1 = { 
        (byte) 217, 
        (byte) 2,         (byte) 156,         (byte) 0,         (byte) 83, 
        (byte) 112,         (byte) 153,         (byte) 1,         (byte) 26, 
        (byte) 0,         (byte) 85,         (byte) 0,         (byte) 104, 
        (byte) 116,         (byte) 116,         (byte) 112,         (byte) 58, 
        (byte) 47,         (byte) 47,         (byte) 119,         (byte) 119, 
        (byte) 119,         (byte) 46,         (byte) 109,         (byte) 97, 
        (byte) 114,         (byte) 107,         (byte) 117,         (byte) 115, 
        (byte) 112,         (byte) 97,         (byte) 103,         (byte) 101, 
        (byte) 46,         (byte) 99,         (byte) 111,         (byte) 109, 
        (byte) 89,         (byte) 3,         (byte) 117,         (byte) 1, 
        (byte) 83,         (byte) 105,         (byte) 103,         (byte) 9, 
        (byte) 1,         (byte) 1,         (byte) 0,         (byte) 64, 
        (byte) 111,         (byte) 19,         (byte) 169,         (byte) 86, 
        (byte) 223,         (byte) 144,         (byte) 99,         (byte) 226, 
        (byte) 72,         (byte) 94,         (byte) 9,         (byte) 247, 
        (byte) 141,         (byte) 241,         (byte) 41,         (byte) 148, 
        (byte) 177,         (byte) 94,         (byte) 103,         (byte) 90, 
        (byte) 158,         (byte) 103,         (byte) 59,         (byte) 125, 
        (byte) 196,         (byte) 213,         (byte) 105,         (byte) 24, 
        (byte) 188,         (byte) 35,         (byte) 18,         (byte) 18, 
        (byte) 200,         (byte) 52,         (byte) 231,         (byte) 186, 
        (byte) 74,         (byte) 32,         (byte) 214,         (byte) 246, 
        (byte) 60,         (byte) 180,         (byte) 140,         (byte) 242, 
        (byte) 250,         (byte) 62,         (byte) 56,         (byte) 71, 
        (byte) 25,         (byte) 190,         (byte) 231,         (byte) 226, 
        (byte) 209,         (byte) 146,         (byte) 30,         (byte) 152, 
        (byte) 115,         (byte) 244,         (byte) 18,         (byte) 213, 
        (byte) 192,         (byte) 202,         (byte) 28,         (byte) 99, 
        (byte) 129,         (byte) 0,         (byte) 15,         (byte) 42, 
        (byte) 42,         (byte) 67,         (byte) 69,         (byte) 82, 
        (byte) 84,         (byte) 73,         (byte) 70,         (byte) 73, 
        (byte) 67,         (byte) 65,         (byte) 84,         (byte) 69, 
        (byte) 42,         (byte) 42,         (byte) 217,         (byte) 1, 
        (byte) 26,         (byte) 0,         (byte) 85,         (byte) 0, 
        (byte) 104,         (byte) 116,         (byte) 116,         (byte) 112, 
        (byte) 58,         (byte) 47,         (byte) 47,         (byte) 119, 
        (byte) 119,         (byte) 119,         (byte) 46,         (byte) 109, 
        (byte) 97,         (byte) 114,         (byte) 107,         (byte) 117, 
        (byte) 115,         (byte) 112,         (byte) 97,         (byte) 103, 
        (byte) 101,         (byte) 46,         (byte) 99,         (byte) 111, 
        (byte) 109, 
    };
    
    /** 
     * <code>
     *      byte[] message = {0xa, 0xb, 0xc, 0xd};
     *       
     *      PrivateKey privKey = new PrivateKey(getClass().getResourceAsStream(Files.MARKUS4_PRIV));
     *      RSAPrivateKeyStructure structure = RSAPrivateKeyStructure.getInstance(privKey.getPrivateKeyInfo().getPrivateKey());
     *      RSAKeyParameters privParameters = new RSAKeyParameters(true, structure.getModulus(), structure.getPrivateExponent());
     *   
     *      RSAEngine rsaEngine = new RSAEngine();
     *      rsaEngine.init(true, privParameters);
     *       
     *      byte[] cipherText = rsaEngine.processBlock(message, 0, message.length);
     *       
     *      Utils.dumpAsJavaByteArray(cipherText);
     * </code>
     * 
     * 64 bytes 
     */
    public static final byte[] rsaEncryptedMessage1 = { 
        (byte) 70, 
        (byte) 28,         (byte) 33,         (byte) 67,         (byte) 91, 
        (byte) 121,         (byte) 154,         (byte) 11,         (byte) 37, 
        (byte) 253,         (byte) 193,         (byte) 127,         (byte) 57, 
        (byte) 172,         (byte) 31,         (byte) 18,         (byte) 42, 
        (byte) 220,         (byte) 209,         (byte) 146,         (byte) 59, 
        (byte) 159,         (byte) 49,         (byte) 230,         (byte) 5, 
        (byte) 157,         (byte) 105,         (byte) 123,         (byte) 160, 
        (byte) 48,         (byte) 57,         (byte) 78,         (byte) 145, 
        (byte) 147,         (byte) 210,         (byte) 135,         (byte) 77, 
        (byte) 132,         (byte) 177,         (byte) 57,         (byte) 110, 
        (byte) 228,         (byte) 101,         (byte) 4,         (byte) 191, 
        (byte) 115,         (byte) 88,         (byte) 86,         (byte) 35, 
        (byte) 162,         (byte) 111,         (byte) 233,         (byte) 87, 
        (byte) 65,         (byte) 134,         (byte) 2,         (byte) 189, 
        (byte) 163,         (byte) 220,         (byte) 209,         (byte) 233, 
        (byte) 150,         (byte) 44,         (byte) 152, 
    };

    
}
